package com.tansuo365.test1.mapper.kucunmapper;

import com.tansuo365.test1.bean.kucunbean.WuliaoKucunSear;

import java.util.List;

/**
 * 物料没有进入库存查询时,是没有到货单保存
 * 当到货单保存,首先查库存查询有无该物料名称(名称规格)
 * 有则执行update,无则进行insert
 * insert后执行结余计算
 * update后也执行结余计算
 *
 */
public interface WuliaoKucunSearMapper {

    int deleteByPrimaryKey(Integer id);

    List<WuliaoKucunSear> listKucunSelective(WuliaoKucunSear wuliaoKucunSear);

    int insertSelective(WuliaoKucunSear wuliaoKucunSear);

    WuliaoKucunSear selectByPrimaryKey(Integer id);

    //根据wuliao名字或者kufang或者两者兼有,获取物料的名称string
    String getWuliaoKucunByWuliaoName(String mingchengguige,String rukukufang);

    //在上面的sql查回来为null时,库存中没有该物料,或者是该库房的这个物料没有,那么执行insert
    int insertWuliaoDaohuoSelect(WuliaoKucunSear wuliaoKucunSear);

    int updateByPrimaryKeySelective(WuliaoKucunSear wuliaoKucunSear);

    //到货单保存以后,根据到货的物料名称规格更新物料的收入数量(累加)
    //也就是: 不管其他操作(期初库存,收入/发出/退还/结余)只要有该物料的名称,一律后续执行update.
    int updateWuliaoShouruShuliangByWuliaoName(String mingchengguige,double daohuoshuliang,String rukukufang);

    //出库单,执行成功后,将出库量更新累加到fachushuliang : fachushuliang=fachushuliang+param2
    int updateWuliaoFachuShuliangByWuliaoName(String mingchengguige,double chukushuliang,String rukukufang);

    //同时破损单/维修单数量后也是chukushuliang的逻辑 TODO 在保存到物料日志时需要加String type,表明是正常出库/破损出库/维修出库
    int updateWuliaoPosunWeixiuByWuliaoName(String mingchengguige,double posunweixiuShuliang,String morenkufang);

    //退库单,执行成功后,将退库量更新累加到tuihuishuliang : tuihuishuliang=tuihuishuliang+param2
    int updateWuliaoTuihuiShuliangByWuliaoName(String mingchengguige,double tuihuishuliang,String rukukufang);

    //结余量,是在新增该物料库存,以及以上update操作时,进行统计计算
    //找到wuliaokucunchaxun表该物料,计算前面的值进行结余量计算
    //期初+收入-发出+退还=结余
    //jieyushuliang=qichukucun+shourushuliang-fachushuliang+tuihuishuliang where mingchengguige = #{param1} and where rukukufang = #{param2}
    int updateWuliaoJieyuShuliangByWuliaoName(String mingchengguige,String rukukufang);

    List<WuliaoKucunSear> listKucunWithRiZhi(WuliaoKucunSear wuliaoKucunSear);

}